home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
tools
/
rb
/
jlcd100.lzh
/
TNB_FSW
/
RSMS070.Lzh
/
RSMOUSE.s
< prev
next >
Wrap
Text File
|
1995-04-25
|
11KB
|
664 lines
*.include tnb.mac
DI macro
ori.w #$0700,sr
.endm
EI macro
andi.w #$F8FF,sr
.endm
SUPER macro
moveq #$81,d0
trap #15
.endm
USER macro
moveq #$81,d0
trap #15
.endm
TimerLed .macro
*bset #0,$00e8a01b
*eori.b #%0000_0111,$00e8a001
.endm
.include iocscall.mac
.include doscall.mac
StartStatio:*******************常駐部
SS:
jmp init-SS(a4)
head:
HEAD1 = 'RSMO'
HEAD2 = 'S070'
.dc.l HEAD1
.dc.l HEAD2
.even
st:
MSD: *---------------------------
* ($24D)[$0934] マウスエミュ
* マウスデータ変更
* a1にワークのアドレスがはいる
MSD_ = $0934.w
tst.w DrvDrv
beq MSD_JMP
movem.l d0-d5/a0,-(sp)
bsr RS_LOF232C
move.w d0,d5
beq MSD_EE *ないなら終わり
move.w MSD_GF(pc),d0 *現在の読み込み待ち位置 0:ボタン 1:X 2:Y
beq @f
subq.w #1,d0
beq MSD_NX
bra MSD_NY
@@:
bsr RS_ISNS232C
andi.w #$FF,d0
move.w d0,MSD_B
andi.b #$C0,d0
TimerLed
cmpi.b #$40,d0
beq @f
*MSとちがうようだ・・
MSD_NoTP:
TimerLed
bsr RS_INP232C *バッファーから消す(これがなければ多少RSの共用が出来るが・・)
clr.w MSD_GF
clr.b MS_Bot *0:L Bot 1:R Bot 設定用
bra MSD_EE
@@:
bsr RS_INP232C *バッファーから消す
subq.w #1,d5
bne MSD_NX *データあり
move.w #1,MSD_GF
bra MSD_EE
MSD_NX:
bsr RS_ISNS232C
andi.w #$FF,d0
move.w d0,MSD_X
andi.w #$C0,d0
bne MSD_NoTP
bsr RS_INP232C *バッファーから消す
subq.w #1,d5
bne MSD_NY *データあり
move.w #2,MSD_GF
bra MSD_EE
MSD_NY: bsr RS_ISNS232C
andi.w #$FF,d0
move.w d0,MSD_Y
andi.w #$C0,d0
bne MSD_NoTP
bsr RS_INP232C *バッファーから消す
TimerLed
*やっとマウス情報が揃った。
*ボタンチェック
move.w MSD_B(pc),d0
lsr.w #4,d0
andi.w #3,d0
tst.w BotMod *ボタンモード
bne @f
lea MB_TRN(pc),a0
move.b 0(a0,d0.w),d0
@@: move.b d0,MS_Bot *0:L Bot 1:R Bot 設定用
*X
move.w MSD_B(pc),d0
move.w d0,d1
lsl.w #6,d0
andi.w #$C0,d0
or.w MSD_X(pc),d0
add.b d0,1(a1)
*Y
lsl.w #4,d1
andi.w #$C0,d1
or.w MSD_Y(pc),d1
add.b d1,2(a1)
clr.w MSD_GF
move.b MS_Bot(pc),d2
or.b d2,(a1)
****** TEMCALLワーク書き込み
lea Data4(pc),a0
tst.b 3(a0)
beq @f
clr.l (a0)
@@: or.b d2,(a0)
add.b d0,1(a0)
add.b d1,2(a0)
bra MSD_EEL
MSD_EE:
move.b MS_Bot(pc),d2
or.b d2,(a1)
****** TEMCALLワーク書き込み
lea Data4(pc),a0
tst.b 3(a0)
beq @f
clr.l (a0)
@@: or.b d2,(a0)
MSD_EEL:
movem.l (sp)+,d0-d5/a0
MSD_JMP:
jmp $00000000.l
MS_INIT:*---------------------------
* ($170)[$05C0]
* IOCS $70 MS_INIT
MS_INIT_ = $05C0.w
tst.w DrvDrv
beq MS_INIT_JMP
movem.l d0-d1,-(sp)
bsr RSINIT
movem.l (sp)+,d0-d1
MS_INIT_JMP:
jmp $00000000.l
MS_SEL: *-----------------------------
* ($17B)[$05EC]
* IOCS $7B MS_SEL
*
MS_SEL_ = $05EC.w
tst.w DrvDrv
beq MS_SEL_JMP
cmpi.w #$104,d1 *RS MOUSE?
beq @f
MS_SEL_JMP:
jmp 0.l
@@: move.l #'TEMC',d0
rts
MS_LIMIT:*-----------------------------
* ($177)[$05DC]
* IOCS $77 MS_LIMIT
*
MS_LIMIT_ = $05DC.w
tst.w DrvDrv
beq MS_LIMIT_JMP
cmpi.l #'TEMC',d1
beq @f
MS_LIMIT_JMP:
jmp 0.l
@@:
move.l #$2,d3
cmpi.w #4,d2 *JOYPORT?
beq @f
bra MS_LIMIT_JMP
@@:
movem.l d1/a0,-(sp)
lea Data4(pc),a0
@@: moveq #0,d0
btst #0,(a0)
beq @f
ori.l #$FF000000,d0
@@: btst #1,(a0)
beq @f
ori.l #$00FF0000,d0
@@: moveq #0,d1
move.b 1(a0),d1
lsl.l #8,d1
or.w d1,d0
move.b 2(a0),d0
move.b #-1,3(a0)
clr.b 1(a0) *移動量はクリア
clr.b 2(a0)
*clr.l (a0)
movem.l (sp)+,d1/a0
rts
Data4: .dc.l 0 *MS_LIMIT戻り値用
*読んだら +3.bを-1に!
RSINIT: *******************************
* RS-232Cの尻有鼠用に初期化
*******************************
* FE DC BA 9 876543 210
move.w #%01_00_10_0_000000_100,d1
*bra RS_SET232C
RS_SET232C:
move.l RS_AUXE(pc),d2
bne @f
IOCS _SET232C
rts
@@: move.b #E_SET232C,d2
IOCS _RSDRV
rts
RS_LOF232C:
move.l RS_AUXE(pc),d2
bne @f
IOCS _LOF232C
rts
@@: move.b #E_LOF232C,d2
IOCS _RSDRV
rts
RS_ISNS232C:
move.l RS_AUXE(pc),d2
bne @f
IOCS _ISNS232C
rts
@@: move.b #E_ISNS232C,d2
IOCS _RSDRV
rts
RS_INP232C:
move.l RS_AUXE(pc),d2
bne @f
IOCS _INP232C *バッファーから消す
rts
@@: move.b #E_INP232C,d2
IOCS _RSDRV
rts
RS_AUXE:
.dc.l 0 * (AUN NO)×0x100の値 0 なら [AUX]
MSD_GF: .dc.w 0 *現在の読み込み待ち位置 0:ボタン 1:X 2:Y
MSD_B: .dc.w 0 *受信データ1
MSD_X: .dc.w 0 *受信データ2
MSD_Y: .dc.w 0 *受信データ3
MS_Bot: .dc.b 0 *0:L Bot 1:R Bot 設定用
.even
* 0,1,2,3
MB_TRN: .dc.b 0,2,1,3
BotMod: .dc.w 0 *0:正常 1:反転
RSMOD: .dc.l 0 *常駐前の RS状態
DrvDrv: .dc.w 1 *1:機能する 0:しない
EndStatio:*******************常駐部
MarkerChk:*----------------------------------------
* a0 アドレス
*
*[戻り値] bne ちがう
* beq あっている
cmpa.l #$00F00000,a0
bcc @f
cmp.l #HEAD1,(a0)
bne @f
cmp.l #HEAD2,4(a0)
bne @f
cmpa.l a0,a0 *z=1
@@:
rts
InvChk:*----------------------------------------
* a0.l==なら非常駐
* a0.l!=なら常駐
movea.l (a0),a0 *一つ前のポインタ
cmpa.l #$00F00000,a0
bcc IC1
cmp.l #HEAD1,$0104(a0)
bne @f
cmp.l #HEAD2,$0108(a0)
bne @f
adda.w #$100,a0 **[SS]のポインタ
rts
@@: **違う
tst.l (a0) *一つ前のポインタ
bne InvChk *0でない(上へ)
IC1: sub.l a0,a0 *非常駐
rts
AtoI:*----------------------------------------
* a2 アドレス
*[戻り値] d0.l 数字
moveq #0,d0
@@: move.b (a2)+,d2
subi.b #'0',d2
bcs AIr
cmpi.b #9,d2
bhi AIr
andi.l #$0000FF,d2
mulu #10,d0
add.l d2,d0
bra @b
AIr: subq #1,a2
rts
init:*------------------------------------------------------------------
lea usrsp,sp
pea LR1(pc)
DOS _PRINT
addq.w #4,sp
** 常駐チェック **
suba.l a1,a1
SUPER
movea.l d0,a1
moveq #0,d1
bsr InvChk
movea.l a0,a3 *常駐先頭アドレス
movea.l MSD_,a0
suba #MSD-head,a0
bsr MarkerChk
bne @f
bset #0,d1
@@:
movea.l MS_INIT_,a0
suba #MS_INIT-head,a0
bsr MarkerChk
bne @f
bset #1,d1
@@:
movea.l MS_SEL_,a0
suba #MS_SEL-head,a0
bsr MarkerChk
bne @f
bset #2,d1
@@:
movea.l MS_LIMIT_,a0
suba #MS_LIMIT-head,a0
bsr MarkerChk
bne @f
bset #3,d1
@@:
*d1に常駐状態
USER
** 常駐していたらそのデータを引用 **
move.l a3,d0
beq conl
move.l RS_AUXE-SS(a3),RS_AUXE
move.w BotMod-SS(a3),BotMod
move.w DrvDrv-SS(a3),DrvDrv
conl: ** コマンドラインチェック **
tst.b (a2)+ *スキップ
sw: move.b (a2)+,d0
beq keep
cmpi.b #' ',d0
beq sw
cmpi.b #$09,d0 *tab
beq sw
cmpi.b #'-',d0
beq swc
cmpi.b #'/',d0
beq swc
swe: pea LR6(pc)
bra PE *end
swc: **スイッチ判断
move.b (a2)+,d0
beq swe
cmpi.b #'?',d0
beq help
ori.b #$20,d0 *小文字化!
cmpi.b #'r',d0
beq free
cmpi.b #'b',d0
beq bswc
cmpi.b #'i',d0
beq iswc
cmpi.b #'a',d0
beq aswc
cmpi.b #'o',d0
beq oswc
cmpi.b #'h',d0
beq help
swcerr: pea LR7(pc)
bra PE *end
aswc:******************
move.l a3,d0
beq @f
tst.w I_SWC
bne @f
pea LR5_(pc)
bra PE *end
@@: bsr AtoI
cmpi.l #$0006,d0
bcc swcerr
lsl.l #8,d0
beq swcerr
move.l d0,RS_AUXE * (AUN NO)×0x100の値 0 なら [AUX]
lea $7C4.w,a1 * IOCS F1 のベクタ
IOCS _B_LPEEK
cmpi.l #$0100_0000,d0
bcs @f
pea LREXRS(pc)
bra PE *end
@@:
bra sw
bswc:******************
bsr AtoI
cmpi.l #$0002,d0
bcc swcerr
move.w d0,BotMod *0:正常 1:反転
bra sw
iswc:******************
clr.l RS_AUXE * (AUN NO)×0x100の値 0 なら [AUX]
move.w #-1,I_SWC
bra sw
oswc:******************
move.b (a2)+,d0
beq swe
ori.b #$20,d0 *小文字化!
cmpi.b #'n',d0
beq os_on
cmpi.b #'f',d0
bne swe
os_off:
move.b (a2),d0 *'f'の字をスキップ
ori.b #$20,d0 *小文字化!
cmpi.b #'f',d0
bne @f
addq #1,a2
@@: clr.w DrvDrv *0:停止
bra sw
os_on:
move.w #1,DrvDrv *1:しようする
bra sw
help:******************
pea LRH(pc)
bra PE *end
keep: ************************** 常駐させる
move.l a3,d0
beq kep_L1
*既に常駐、設定変更
tst.w I_SWC
bne kep_L1
bsr RSINIT
move.l RS_AUXE(pc),RS_AUXE-SS(a3)
move.w BotMod(pc),BotMod-SS(a3)
move.w DrvDrv(pc),DrvDrv-SS(a3)
bsr keepsub
pea LR5(pc)
bra PE *end
kep_L1:
**セット
moveq #-1,d1
bsr RS_SET232C
move.l d0,RSMOD *常駐前の RS状態
bpl @f
move.b RS_AUXE+2(pc),d0
addi.b #'0',d0
move.b d0,LRANOV_
pea LRANOV(pc)
bra PE *end
@@:
bsr RSINIT
suba.l a1,a1
SUPER
movea.l d0,a1
move.l MSD_,MSD_JMP+2
lea MSD-SS(a4),a0
move.l a0,MSD_
move.l MS_INIT_,MS_INIT_JMP+2
lea MS_INIT-SS(a4),a0
move.l a0,MS_INIT_
move.l MS_SEL_,MS_SEL_JMP+2
lea MS_SEL-SS(a4),a0
move.l a0,MS_SEL_
move.l MS_LIMIT_,MS_LIMIT_JMP+2
lea MS_LIMIT-SS(a4),a0
move.l a0,MS_LIMIT_
USER
bsr keepsub
pea LRKP(pc)
DOS _PRINT
addq #4,sp
clr.w -(sp)
move.l #EndStatio-StartStatio,-(sp)
DOS _KEEPPR
****************
keepsub:
lea LR2(pc),a0
move.b RS_AUXE+2(pc),d0
beq @f
lea LR2_(pc),a0
addi.b #'0',d0
move.b d0,LR2_1
@@:
tst.w DrvDrv
bne @f
lea LR2N(pc),a0
@@: move.l a0,-(sp)
DOS _PRINT
addq #4,sp
move.w BotMod(pc),d0 *ボタンモード
beq @f
pea LRTB(pc)
DOS _PRINT
addq #4,sp
@@:
@@:
bsr RS_LOF232C
tst.w d0
beq ks_L1
bsr RS_INP232C
bra @b
ks_L1:
rts
free: *****************************常駐解除
move.l a3,d0
bne @f
pea LR8(pc) **非常駐
bra PE *end
@@: cmpi.w #$F,d1
beq @f
pea LR4(pc) **ベクタが占領
bra PE *end
@@: suba.l a1,a1
SUPER
movea.l d0,a1
move.l (MSD_JMP-SS)+2(a3),MSD_
move.l (MS_INIT_JMP-SS)+2(a3),MS_INIT_
move.l (MS_SEL_JMP-SS)+2(a3),MS_SEL_
move.l (MS_LIMIT_JMP-SS)+2(a3),MS_LIMIT_
USER
move.l RSMOD-SS(a3),d1
bsr RS_SET232C
sub.l #$00000F0,a3
move.l a3,-(sp)
DOS _MFREE
addq #4,sp
pea LR3(pc)
PE: DOS _PRINT
addq.w #4,sp
DOS _EXIT
I_SWC: .dc.w 0 *スイッチ /I がある?
LR2: .dc.b ' RS-232C PORT の シリアルマウスが使用出来ます。',$0d,$0a,0
.even
LR2_: .dc.b ' RS-232C PORT [AUX'
LR2_1: .dc.b '0] の シリアルマウスが使用出来ます。',$0d,$0a,0
.even
LR2N: dc.b ' ドライバーの機能は停止しています。',$0d,$0a,0
.even
LRKP: .dc.b ' 常駐しました。',$0d,$0a,0
.even
LR3: dc.b ' 常駐解除しました。',$0d,$0a,0
.even
LR4: dc.b ' ベクタが占領されています。',$0d,$0a,0
.even
LR5: .dc.b ' 設定を変更しました。',$0d,$0a,0
LR5_: .dc.b ' 既に常駐しています。',$0d,$0a,0
.even
LR6: .dc.b ' コマンドラインが異常です。',$0d,$0a,0
.even
LR7: .dc.b ' スイッチが異常です。',$0d,$0a,0
.even
LR8: .dc.b ' 常駐していません。',$0d,$0a,0
.even
LREXRS: .dc.b ' RSDRV.SYSが常駐していません。',$0d,$0a,0
.even
LRANOV: .dc.b ' RS-232C PORT [AUX'
LRANOV_:.dc.b '0] がありません。',$0d,$0a,0
.even
LRTB: .dc.b ' ボタン機能を反転します。',$0d,$0a,0
.even
LRH:
.dc.b $0d,$0a
.dc.b '使用法:RSMOUSE.x [switch]',$0d,$0a
*.dc.b ' /I ・・・・ 強制常駐します(スイッチのはじめに付けること)。',$0d,$0a
.dc.b ' /A[n] ・ AUX[n]のポートのマウスを使用します(n=1~5)。',$0d,$0a
.dc.b ' /R ・・・・ 常駐解除します。',$0d,$0a
.dc.b ' /ON ・・・ 機能を有効にします(def.)。',$0d,$0a
.dc.b ' /OFF ・・ 機能を停止します。',$0d,$0a
.dc.b ' /B0 ・・・ ボタン機能をノーマルにします(def.)。',$0d,$0a
.dc.b ' /B1 ・・・ ボタン機能を反転します。',$0d,$0a
.dc.b $0d,$0a,0
.even
LR1: dc.b 'X68k RS-232C MOUSE DRIVER Version 0.70 Copyright 1994 1995 TNB製作所',$0d,$0a,0
.even
.ds.b 2048
usrsp: